package com.ws.common.exception;

import com.ws.common.util.CommonUtils;
import com.ws.common.util.ResultCode;

/**
 * Created by WS on 2018/1/26.
 */
public class BaseRuntimeException extends RuntimeException {
    private String code;

    /**
     * 提示信息参数，用于填充.properties中的{}参数
     */
    private String[] msgParams;


    /**
     * 不带信息参数的异常
     */
    public BaseRuntimeException(String code, Throwable cause) {
        super(CommonUtils.getResultMsg(code,null),cause);
        this.code = code;
        this.setCode(code);
    }

    /**
     * 不带信息参数的异常
     */
    public BaseRuntimeException(ResultCode resultCode) {
        super(resultCode.getMsg());
        this.code = resultCode.getCode();
        this.setCode(code);
    }

    /**
     * 带一个信息参数的异常
     */
    public BaseRuntimeException(String code, String msgParam, Throwable cause) {
        super(CommonUtils.getResultMsg(code,new String[]{msgParam}),cause);
        this.code = code;
        this.msgParams=new String[1];
        this.msgParams[0] = msgParam;
        this.setCode(code);
    }

    /**
     * 带多个信息参数的异常
     */
    public BaseRuntimeException(String code, String[] msgParams, Throwable cause) {
        super(CommonUtils.getResultMsg(code,msgParams),cause);
        this.code = code;
        this.msgParams = msgParams.clone();//不直接传递引用是出于代码安全考虑，避免未知调用者修改引用内容
        this.setCode(code);
    }

    /**
     *
     * 功能描述:异常信息构造函数，用于FA框架反射调用
     */
    public BaseRuntimeException(String resultMsg)
    {
        super(resultMsg);
    }



    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }


    public String[] getMsgParams() {
        return msgParams.clone();//不直接返回msgParams引用是为了代码安全，避免被未知调用者修改引用的内容。
    }

    public void setMsgParams(String[] msgParams) {
        this.msgParams = msgParams.clone();//不直接赋值msgParams引用是为了代码安全，避免被未知调用者修改引用的内容。
    }

}
